/**
 *
 */
package yl.hs.bmipfull.service.system;

import yl.hs.bmipfull.pojo.system.UserInfoEntity;
import yl.hs.bmipfull.pojo.system.UserLoginEntity;
import yl.hs.bmipfull.service.IBaseService;
import yl.hs.bmipfull.viewmodels.PageQuery;
import yl.hs.bmipfull.viewmodels.PageResult;
import yl.hs.bmipfull.viewmodels.SubmitModel;

import javax.security.auth.login.AccountException;
import java.util.List;

/**
 * @category 用户信息操作服务
 *
 * @author 谢景广
 *
 */
public interface IUserService extends IBaseService {
    /**
     * @category 根据登录信息获取用户信息
     * @param account 用户账户
     * @param password 用户密码
     * @return 用户信息
     */
    UserInfoEntity getUserByLogin(String account, String password) throws Exception;

    /**
     * 根据用户账户获取用户信息
     * @param account 用户登录账户
     * @return 用户信息
     */
    UserInfoEntity findUserByAccount(String account);

    /**
     * 根据用户账户获取用户信息
     * @param account 用户登录账户
     * @return 用户信息
     */
    UserInfoEntity findConstructionUserByAccount(String account);

    /**
     * 根据用户编号获取用户登录信息
     * @param userSN 用户编号
     * @return 用户登录信息
     */
    UserLoginEntity findUserLoginBySN(String userSN);

    /**
     * 根据分页查询获取用户的分页查询数据
     * @param query 分页查询信息
     * @return 分页查询结果
     */
    PageResult<Object> queryPage(PageQuery query, int rowNum, int page);

    /**
     * 根据用户编号获取用户信息
     * @param sn 用户编号
     * @return 用户信息
     */
    UserInfoEntity findUserBySN(String sn);

    /**
     * 删除指定编号的用户信息
     * @param sn 用户编号数组
     * @return 删除结果
     */
    Integer deleteUser(String[] sn);

    /**
     * 修改用户个人信息
     * @param model 提交的用户信息
     * @return 创建或者更新结果
     */
    Integer updatePersonalInfo(SubmitModel model);
    /***
     * 根据提交的用户信息更新或者创建用户信息
     * @param model 提交的用户信息
     * @return 创建或者更新结果
     */
    Integer save(SubmitModel model) throws Exception;

    /**
     * 修改用户密码
     * @param sn 用户编号
     * @param oldPwd 用户原密码
     * @param newPwd 用户新密码
     * @return
     */
    Integer changePassword(String sn, String oldPwd, String newPwd) throws AccountException;

    List<UserInfoEntity> queryAll();

    List<UserInfoEntity> queryAlByOrganizationCode(String organizationCode);

    /**
     * 根据用户编号集合获取用户信息
     * @return
     */
    List<UserInfoEntity> queryByUserSNList(List<String> snList);

    /**
     * 根据用户sn重置密码
     * @return
     */
    Integer RestPassword(String sn);


    Integer updateUserInfo(UserInfoEntity user);
}
